home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 424_02 / ED-157 / find_column.c < prev    next >
C/C++ Source or Header  |  1994-02-08  |  2KB  |  69 lines

  1. /*
  2.  * Copyright (C) 1992 by Rush Record
  3.  * Copyright (C) 1993 by Charles Sandmann (sandmann@clio.rice.edu)
  4.  * 
  5.  * This file is part of ED.
  6.  * 
  7.  * ED is free software; you can redistribute it and/or modify it under the terms
  8.  * of the GNU General Public License as published by the Free Software Foundation.
  9.  * 
  10.  * ED is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  11.  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  12.  * PARTICULAR PURPOSE.  See the GNU General Public License for more details.
  13.  * 
  14.  * You should have received a copy of the GNU General Public License along with ED
  15.  * (see the file COPYING).  If not, write to the Free Software Foundation, 675
  16.  * Mass Ave, Cambridge, MA 02139, USA.
  17.  */
  18. #include "opsys.h"
  19.  
  20. #include "rec.h"
  21. #include "window.h"
  22. #include "ed_dec.h"
  23.  
  24. /******************************************************************************\
  25. |Routine: find_column
  26. |Callby: down_arrow up_arrow
  27. |Purpose: Returns the column number of the end of a record, and the length of
  28. |         the data that fit on the screen.
  29. |Arguments:
  30. |    r is the record.
  31. |    col is the column limit for the analysis of the record.
  32. |    byte is the returned length of the data that fits on the screen.
  33. \******************************************************************************/
  34. Int find_column(r,col,byte)
  35. register rec_ptr r;
  36. register Int col,*byte;
  37. {
  38.     register Int i,c,last,ch;
  39.  
  40.     if(HEXMODE)
  41.     {
  42.         for(last = c = i = 0;i < r->length;i++)
  43.         {
  44.             last = c;
  45.             c += 4;
  46.             if(c >= col)
  47.                 break;
  48.         }
  49.     }
  50.     else
  51.     {
  52.         for(last = c = i = 0;i < r->length;i++)
  53.         {
  54.             last = c;
  55.             if((ch = r->data[i]) == '\t')
  56.                 c = tabstop(c);
  57.             else if(NONPRINTNCS(ch))
  58.                 c += 4;
  59.             else
  60.                 c++;
  61.             if(c >= col)
  62.                 break;
  63.         }
  64.     }
  65.     *byte = i;
  66.     return(last + 1);
  67. }
  68.  
  69.